[iOS 10][小ネタ] UIScrollView に refreshControl が追加されました!

[iOS 10][小ネタ] UIScrollView に refreshControl が追加されました!

Clock Icon2016.10.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大したことじゃないけれど

iOS 10 から UIScrollView のプロパティに refreshControl が追加されました。

@available(iOS 10.0, *)
open var refreshControl: UIRefreshControl?

画面を下に引っ張ってコンテンツを更新するアレです。

サンプルコード

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()

        setup()
    }

    func setup() {
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
        scrollView.refreshControl = refreshControl
    }

    func handleRefresh(sender : UIRefreshControl) {

        // do something.

        sender.endRefreshing()
    }
}

上記のように、生成した UIRefreshControl のインスタンスを scrollView の refreshControl に代入します。
このプロパティの初期値は nil です。

比較

これまでは以下のように addSubview する必要がありました。

Before

scrollView.addSubview(refreshControl)

After

scrollView.refreshControl = refreshControl

これだけの違いです。
でもコードで addSubview しなくてよくなったのは嬉しいですね。
addSubview は何回も無駄にやってしまっているのではないかと不安になるときがありますからね!(私だけかな?)
動作確認したところ、更新終了時のグルグルアニメーションが若干スムーズ(?)になっているような気がしました。
addSubview 封じ がどこかで効いているようです。

さいごに

UIScrollView のプロパティに追加されたことで、継承クラスの UITableView や UICollectionView にも適用することができます。
UIRefreshControl を使用する際は addSubView ではなく、プロパティを利用するようにしてみてはいかがでしょうか。

※ UITableViewController には既に refreshControl プロパティが存在します。

ミレニアム・ファルコン製作日記 #38

38 号 表紙

mfd_38_1

パーツ

mfd_38_2

mfd_38_3

mfd_38_4

成果

mfd_38_5

mfd_38_6

mfd_38_7

今回の作業は以下の 4 つでした。

  • 搭乗ランプのライトを取り付ける
  • ランプを準備する
  • ヒンジを組み立てる
  • ランプをヒンジで連結する

細かいパーツが大量に送られてきました。
今回と次回で搭乗ランプを一気に組み立てます。

搭乗ランプ はミレニアム・ファルコンで乗り降りする部分です。
ウィ〜ン、プッシュ〜みたいな感じで開いたり閉じたりする部分。
可動部分なのでパーツが多いわけですね。

搭乗ランプが開くと内部が LED ライトで照らされるようで、その回路部分を「ランプ構造を支えるセクション」に取り付けました。
また、ランプの上端と外殻プレートを連結するヒンジも組み立てました。
これは強度を持たせるためにキャストメタル製とのことです。
いいと思います。

スター・ウォーズの不思議

ダース・ベイダーとライトセーバー。
ベイダーセーバー
vadersaber
英語表記 2 文字目の a の発音はどちらも éɪ(エイ) のはず。(たぶん)

なぜ日本語表記では、
ライトセバーではなく、ライトセバーなのか。
ダース・ベダーではなく、ダース・ベダーなのか。

ご存知の方がいたら教えてください。

それではまた次回。

May the Force be with you!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.